package com.sitech.openapi.service;

import com.sitech.openapi.domain.*;
import org.springframework.http.HttpHeaders;

import java.util.List;
import java.util.Map;

/**
 * add by wangdj 2018/12/11
 * 关于服务一致性二期优化工作支撑--电子发票
 */
public interface InvoiceInfoService{

    /**
     * 新增开票信息
     * @param invoiceInformation
     * @return
     */
    public InvoiceInformation addInvoiceInfo(InvoiceInformation invoiceInformation);

    /**
     * 查询开票信息
     * @param serialNumber
     * @return
     */
    public InvoiceInformation getInvoiceInfo(String serialNumber,String type,String lanId);

    /**
     * 更新开票信息
     * @param id
     * @param attrInfoList
     * @return
     */
    public InvoiceInformation updateInvoiceInfo(String id,List<Map<String,String>> attrInfoList);

    /**
     * 因为开票信息为纵向列表，所以封装成一个方法。
     * @param invoiceInfoList
     * @return
     */
    public InvoiceInformation getInvoiceInformation(List<Map<String,String>> invoiceInfoList);

    //查询营业订单类型的增值税普通电子发票
    public List<OrderOneItem> getOrderOneItems(String serialNumber,String lanId);

    //开具发票
    public void doIssueInvoice(IssueInvoice issueInvoice,HttpHeaders headers);

    /**
     * 调用计费侧接口开具电子发票
     * @param issueInvoice
     * @param headers
     */
    public void doIssueInvoiceByBill(IssueInvoice issueInvoice,HttpHeaders headers);

    /**
     * 调用中兴接口进行电子发票的打印
     * @param issueInvoice
     * @param inMap
     * @param acctItemList
     * @return
     */
    public Map<String, String> doDealInvoiceOpenInfo(IssueInvoice issueInvoice,Map inMap,List<Map<String,String>> acctItemList);

    //通过发票实例ID查询发票信息《发票接口》
    public Invoice getInvoiceById(String invoiceId,String lanId,HttpHeaders headers);

    /**
     * 通过电子发票实例ID获取计费侧的发票信息——调计费侧接口
     * @param urlPara
     * @param headers
     * @return
     */
    public Invoice getInvoiceByIdtoBill(String urlPara,HttpHeaders headers);

    /**
     * 发票开具完成后的结果异步反馈——《发票接口》
     * @param invoice
     * @return
     */
    public String getIssueInvoiceResult(Invoice invoice);

    /**
     * 通过客户ID获取购买方的地址，开户行及纳税人标识
     * @param custId
     * @return
     */
    public Map<String,String> doQryGmfInfo(String custId);

    //主要是用于测试
    public void test();

}